package java_thinking.unit_21._21_15;

import net.jcip.annotations.ThreadSafe;

/**
 * @Desc:   15-2 基于 CAS 实现的非阻塞计数器
 *              1 CasCounter 不会阻塞，但如果其他线程同时更新计数器，那么会执行重试操作
 *              2 实际上，当竞争程度不高时，基于 CAS 的计数器在性能上远远超过了基于锁的计数器，而在没有竞争时甚至更高
 * @author: cww
 * @DateTime: 2019-06-27 23:53
 */
@ThreadSafe
public class CasCounter {
    private SimulatedCAS value;
    public int getValue() {
        return value.get();
    }
    public int increment() {
        int v;
        do {
            v = value.get();
        }
        while (v != value.compareAndSwap(v, v + 1));
        return v + 1;
    }


}
